A popular emerging framework for facilitating the execution of multiple software applications on a single computing device is the software container. Prior to containers, multiple virtual machines (VMs) concurrently emulating separate computer systems within a single hardware computer system might be employed. In such examples, each VM provides the environment in which a separate operating system (OS), one or more applications, and any necessary libraries and binary files, may execute, and the VMs interact with the underlying hardware by way of a hypervisor. On the other hand, multiple software containers (e.g., Docker® containers) may execute atop a single container engine, which may operate atop a single OS employed within a hardware computer system. Each container, in turn, may include an application with any binaries and libraries necessary to execute the application, often resulting in each container being much smaller, and starting execution more quickly, than a corresponding VM. Consequently, containers may be more readily employed in smaller client computer systems, and may facilitate a modularized deployment of individual applications within a single computer system.
An additional benefit of containers is the ability to execute applications written in different programming languages so that multiple processes may operate concurrently so that each individual process may be employed using a language most appropriate to its corresponding task. However, the use of multiple separate containers may also complicate the ability of the various applications to communicate with each other between containers, which may be useful in some examples, such as when multiple applications operate on the same set of data.
The headings provided herein are merely for convenience and do not necessarily affect the scope or meaning of the terms used.